#include <bits/stdc++.h>
// 2024/08/07
// tag: 递归 搜索 记忆化搜索

#define int long long
#define pp pair<int, pair<int, int>>
#define F(t) (t.first)
#define S(t) (t.second.first)
#define T(t) (t.second.second)
using namespace std;

map<pair<int, pair<int, int>>, int> UM;

// 计算w函数
int w(pp p){
    // 如果UM中已经存在p，则直接返回UM[p]
    if (UM.find(p) != UM.end())
        return UM[p];
    // 如果p中的三个数有一个小于等于0，则返回1
    if (F(p) <= 0 || S(p) <= 0 || T(p) <= 0)
        UM[p] = 1;
    // 如果p中的三个数有一个大于20，则返回w({20, {20, 20}})
    else if (F(p) > 20 || S(p) > 20 || T(p) > 20)
        UM[p] = w({20, {20, 20}});
    // 如果p中的三个数满足F(p) < S(p) < T(p)，则返回w({F(p), {S(p), T(p) - 1}}) + w({F(p), {S(p) - 1, T(p) - 1}}) - w({F(p), {S(p) - 1, T(p)}});
    else if (F(p) < S(p) && S(p) < T(p))
        UM[p] = w({F(p), {S(p), T(p) - 1}}) + w({F(p), {S(p) - 1, T(p) - 1}}) - w({F(p), {S(p) - 1, T(p)}});
    // 否则返回w({F(p) - 1, {S(p), T(p)}}) + w({F(p) - 1, {S(p) - 1, T(p)}}) + w({F(p) - 1, {S(p), T(p) - 1}}) - w({F(p) - 1, {S(p) - 1, T(p) - 1}});
    else
        UM[p] = w({F(p) - 1, {S(p), T(p)}}) + w({F(p) - 1, {S(p) - 1, T(p)}}) + w({F(p) - 1, {S(p), T(p) - 1}}) - w({F(p) - 1, {S(p) - 1, T(p) - 1}});
    // 返回UM[p]
    return UM[p];
}

signed main()
{
    vector<pp> Input;
    int a, b, c;
    // 输入a, b, c，直到输入-1 -1 -1
    while (a != -1 || b != -1 || c != -1){
        cin >> a >> b >> c;
        Input.push_back({a, {b, c}});
    }
    // 输出每个Input中的w函数值
    for (int i = 0; i < Input.size() - 1; i++){
        cout << "w(" << F(Input[i]) << ", " << S(Input[i]) << ", " << T(Input[i]) << ") = " << w(Input[i]) <<endl;
    }
    return 0;
}